/*
    Copyright (C) 2009 Igor Yudincev

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/
#include <windows.h>

static size_t nData;
static void **Data;

void StackPush(void *item) {
	void **NewData = (void **)malloc((nData + 1) * sizeof(void*));
	if (Data != NULL) {
		memcpy(NewData, Data, nData * sizeof(void*));
		free(Data);
	}
	NewData[nData] = item;
	nData++;
	Data = NewData;
}

void *StackPop() {
	if (nData == 0)
		return NULL;
	void *result = Data[nData - 1];
	void **NewData = NULL;
	if (nData > 1) {
		NewData = (void **)malloc((nData - 1) * sizeof(void*));
		memcpy(NewData, Data, (nData - 1) * sizeof(void*));
	}
	free(Data);
	Data = NewData;
	nData--;
	return result;
}

void *StackPeek(size_t iNestLevel = 0) {
	if (nData <= iNestLevel)
		return NULL;
	return Data[nData - iNestLevel - 1];
}
